import router from './router'
import {getToken} from "./utils/auth.ts";
import type {RouteLocationNormalized, RouteLocationNormalizedLoaded, NavigationGuardNext} from "vue-router"
import usePermissionStore from "@/store/modules/permission.ts";
import {ElMessage} from "element-plus";
import useUserStore from "@/store/modules/user.ts";
import {isHttp} from "@/utils/z.ts";
import {close, start} from '@/utils/nprogress';

const whiteList = ['/login', '/register', "/OfficialWebsite", "/WeGao"];
const pointToRouter: string = "/login";
router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalizedLoaded, next: NavigationGuardNext): void => {

    start();
    if (getToken()) {
        if (to.path === '/') {
            next({path: "/redirect"});
            close();
        } else {
            if (usePermissionStore().sidebarRouters.length === 0) {
                usePermissionStore().generateRoutes().then((accessRoutes: any) => {
                    // 根据roles权限生成可访问的路由表
                    accessRoutes.forEach((route: any) => {
                        if (!isHttp(route.path)) {
                            router.addRoute(route) // 动态添加可访问路由表
                        }
                    })
                    next({...to, replace: true});// hack方法 确保addRoutes已完成
                }).catch(err => {
                    console.log('66666666')
                    useUserStore().logOut().then(() => {
                        ElMessage.error(err)
                        next({path: '/'})
                    })
                })
            }else{
                next();
            }
        }
    } else {
        // 没有token
        if (whiteList.indexOf(to.path) !== -1) {
            // 在免登录白名单，直接进入
            next();
        } else {
            // next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
            next(`${pointToRouter}?redirect=${to.fullPath}`); // 否则全部重定向到登录页
            close();
        }
    }
})

router.afterEach(() => {
    close();
})
